//
//  main.cpp
//  125 验证回文串
//
//  Created by Yan Zihao on 2024/9/28.
//

#include <iostream>
#include<string>
using namespace std;

/*class Solution
{
public:
    bool isPalindrome(string s)
    {
        string s1;
        string s2;
        for(int i = 0;i<s.size() - 1;i++)
        {
            if(s[i] > 'A' && s[i] < 'Z')
            {
                s[i] += 32;
                s1.push_back(s[i]);
                i++;
            }
            if(s[i] > 'a' && s[i] < 'z')
            {
                s1.push_back(s[i]);
                i++;
            }
            else
            {
                i++;
            }
        }

        for(int i = s.size()-1;i > 0;i--)
        {
            s2.push_back(s[i]);
        }
        if(s1 == s)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
};*/

class Solution
{
public:
    bool IsPalindrome(string s)
    {
        string s1, s2;

        // 遍历字符串并过滤非字母数字字符，同时统一为小写字母
        for (int i = 0; i < s.size(); i++)
        {
            if (isalnum(s[i])) // 判断是否为字母或数字
            {
                s1.push_back(tolower(s[i])); // 转为小写字母并加入s1
            }
        }

        // 构造s1的反向字符串s2
        for (int j = s1.size() - 1; j >= 0; j--)
        {
            s2.push_back(s1[j]);
        }

        // 比较s1和s2，判断是否为回文
        return s1 == s2;
    }
};
